jieba

对中文文本进行分词操作,产生包含产生词语的列表

1
pip install jieba

精确模式

将文本精确地切开,分词后无冗余,适合文本分词

  • jieba.cut( “中国是一个伟大的国家” ) –> 生成器[‘中国’, ‘是’, ‘一个’, ‘伟大’, ‘的’, ‘国家’]

  • jieba.lcut( “中国是一个伟大的国家” ) –> [‘中国’, ‘是’, ‘一个’, ‘伟大’, ‘的’, ‘国家’]

全模式

把文本中所有可能成词的词语都扫描出来,速度快,存在冗余,不能解决歧义

  • jieba.cut(“中国是一个伟大的国家”, cut_all=True) –>生成器[‘中国’, ‘国是’, ‘一个’, ‘伟大’, ‘的’, ‘国家’]

  • jieba.lcut(“中国是一个伟大的国家”, cut_all=True) –>[‘中国’, ‘国是’, ‘一个’, ‘伟大’, ‘的’, ‘国家’]

搜索引擎模式

在精确模式基础上,对长词再次切分,提高召回率

  • jieba.cut_for_search(‘新时代中国特色社会主义’)

    [‘新’, ‘时代’, ‘中国’, ‘特色’, ‘社会’, ‘会主’, ‘主义’, ‘社会主义’]

  • jieba.lcut_for_search(‘新时代中国特色社会主义’)

    [‘新’, ‘时代’, ‘中国’, ‘特色’, ‘社会’, ‘会主’, ‘主义’, ‘社会主义’]

分词词典添加新词

jieba.add_word(“盘它”)

范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
>>>s = "习近平总书记提出了新时代中国特色社会主义思想"

>>>import jieba

>>>jieba.lcut(s)

['习近平', '总书记', '提出', '了', '新', '时代', '中国', '特色', '社会主义', '思想']

>>>jieba.lcut_for_search(s)

['习近平', '书记', '总书记', '提出', '了', '新', '时代', '中国', '特色', '社会', '会主', '主义', '社会主义', '思想']

>>>jieba.lcut(s, cut_all = True)

['习近平', '总书记', '书记', '提出', '了', '新', '时代', '中国', '国特', '特色', '社会', '社会主义', '会主', '主义', '思想']

>>>for w in jieba.cut(s):
print(w, end=",")

习近平,总书记,提出,了,新,时代,中国,特色,社会主义,思想,

>>>type(w)

<class 'str'>

>>>jieba.add_word("新时代中国特色社会主义")

>>>jieba.lcut(s)

['习近平', '总书记', '提出', '了', '新时代中国特色社会主义', '思想']

>>>jieba.add_word("新时代")

>>>jieba.lcut(s)

['习近平', '总书记', '提出', '了', '新时代中国特色社会主义', '思想']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#读入白鹿原,分词后输出最长单词。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬
#如果存在多个单词长度一致,请输出按照Unicode排序后最大的单词。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬
import jieba
f = open("白鹿原.txt")
ls = jieba.lcut(f.read())
A = set(ls)
maxw = ""
for w in A:
if len(w) > len(maxw):
maxw = w
if len(w) == len(maxw) and w > maxw:
maxw = w
print(maxw)
f.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
##《白鹿原》原著内容,请读入内容,分词后输出长度大于2且最多的单词。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬
##如果存在多个单词出现频率一致,请输出按照Unicode排序后最大的单词。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

#参考答案
import jieba
f = open("白鹿原.txt")
ls = jieba.lcut(f.read())
d = {}
for w in ls:
d[w] = d.get(w, 0) + 1
maxc = 0
maxw = ""
for k in d:
if d[k] > maxc and len(k) > 2:
maxc = d[k]
maxw = k
if d[k] == maxc and len(k) > 2 and k > maxw:
maxw = k
print(maxw)
f.close()
#自己写的---------------------
import jieba
f = open("白鹿原.txt")
count = dict()
ls = jieba.lcut(f.read())
for word in ls:
if len(word) > 2:
count[word] = count.get(word, 0) + 1
print(sorted(count.items(),key = lambda x:x[1],reverse = True)[0][0])
f.close()